package com.example.teaching_server.repository;

import com.example.teaching_server.entity.Grade;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * 年级数据访问层
 */
@Repository
public interface GradeRepository extends JpaRepository<Grade, Long> {

    /**
     * 查询所有年级名称（按年级名称排序）
     */
    @Query("SELECT g.gradeName FROM Grade g ORDER BY g.gradeName")
    List<String> findAllGradeNames();

    /**
     * 查询所有年级（按年级ID排序）
     */
    @Query("SELECT g FROM Grade g ORDER BY g.gradeId ASC")
    List<Grade> findAllGrades();

    /**
     * 查询所有年级（按年级ID排序）- Spring Data JPA 方法
     */
    List<Grade> findAllByOrderByGradeIdAsc();

    /**
     * 查询所有年级（按排序号排序）
     */
    List<Grade> findAllByOrderBySortOrderAsc();

    /**
     * 按年级名称精确查询
     */
    Optional<Grade> findByGradeName(String gradeName);

    /**
     * 按年级名称关键字搜索（忽略大小写）
     */
    List<Grade> findByGradeNameContainingIgnoreCase(String keyword);

    /**
     * 检查年级名称是否存在
     */
    boolean existsByGradeName(String gradeName);

    /**
     * 获取最大的排序号
     */
    @Query("SELECT COALESCE(MAX(g.sortOrder), 0) FROM Grade g")
    Integer findMaxSortOrder();
}
